package com.huluobo.a2308douyindemo.demo

import android.app.Dialog
import android.content.Context
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
import com.bumptech.glide.Glide.init
import com.huluobo.a2308douyindemo.R

/**
 *  Created by LC on 2025/10/16.
 *  观察者模式 三要素 Observer(观察者) Observable Owner(被观察者) subscribe(订阅)
 *  LifeCycle总结
 *  1.如果要使用LifeCycle,首先需要创建类来实现LifecycleObserver接口,让它可以去感知activity或者fragment的生命周期变化
 *  2.需要一个宿主对象,LifeCycleOwner接口,由于Activity和Fragment都已经实现过该接口,所以可以省略
 *  3.通过lifecycle.addObserver(this) 产生订阅关系,到此为止观察者三要素已经齐全
 *  4.可以有小姐库尔宿主对象中控制签他控件的生命周期,可以让观察者跟随宿主的生命周期变化做出自行的判断,比如关闭dialog,或者结束倒计时
 *  可以有效避免内存泄漏
 */
class MyDialog(context: Context) : Dialog(context), LifecycleObserver {

    init {
        //判断如果上下文是个activty的话,而且必须是已经实现了被观察者接口的Activity,自动产生订阅关系
        if (context is AppCompatActivity) {
            //产生订阅关系
            context.lifecycle.addObserver(this)
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.my_dialog)
    }

    //当被观察者调用到onCreate的时候,会触发该方法
    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    private fun onShow() {
        show()
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    private fun onDismiss() {
        //当感知到activity的生命周期是销毁的时候,同时判断dialog是否是展示的状态,关闭掉dialog
        if (isShowing) {
            dismiss()
        }
    }
}